iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0

「欸!?阿按了這個按鈕怎麼沒反應阿?」

這是我媽最常問我的問題,大部分情況都是她遙控器忘記裝電池。

如果按鈕按下去之後有個反應或是回饋的話,是不是就能讓使用者能更沉浸在互動中呢?

「幫我看一下啦。」

媽!沒問題!


現在的你了解了 Activity 的大致用途,接下來就是讓 App 上的按鈕點了真的有反應的時候了。這時候介紹一個東西:
https://ithelp.ithome.com.tw/upload/images/20211007/20140638AhbD6xIMEr.jpg

Toast

其實我第一次看到這個名詞的時候,也是各種問號,吐司???查了一下資料發現,其實它比想像中的更加熟悉,就是這個:

https://ithelp.ithome.com.tw/upload/images/20211007/20140638DmIsvHLzyP.png

通常會出現在底部,大概過幾秒就消失的小文字訊息方塊就是 Toast ,當然它也可以出現在螢幕的任何地方,也可以客製化 Toast 的樣式,但我們這邊就沒有說明這些了。這邊只是先放個提示說你點了這個 Button 這樣。

昨天所說到 Andriod 在第一次打開 App 的時候會先調用 onCreate( ) ,再去畫出 Layout ,你可以把要執行動作的程式碼加到 onCreate() 之後。利用 findViewById( ) 可以找到 Button ,R.id.Button 是 Button 的 resource ID,每個resource ID 都是唯一值。再把 Button 這個 object 保存到一個變數 rollButton 中。

val rollButton: Button = findViewById(R.id.button)

把這行加到 onCreate( ) 函式之中就會是這個樣子:

override fun onCreate(savedInstanceState: Bundle?){
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
  
    val rollbutton: Button = findViewById(R.id.button)

再往上看到 import 會發現多了一行內容:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

第三行的 import 是自動加上去的,如果沒有的話直接在警告那邊按 alt+Enter 就可以添加上去了。

接下來要設定監聽,讓 button 的動作與程式結合。我們使用 setOnClickListener( ) 這個function 去監聽,實際上在這個方法的後面會使用 { } ,大括號中可以放入點按之後會執行的動作的程式碼。

rollButton.serOnClickListener{

}

我們選擇在裡面放入一個 Toast 訊息,讓 user 知道他點了按鈕:

val toast = Toast.makeText(this , "Dice Rolled!",Toast.LENGTH_SHORT)
toast.show()

利用 Toast.makeText( ) 來創建包含 "Dice Roller!" 訊息的 Toast ,在透過 show( ) 來顯示。當然你也可以寫得更簡潔一點:

Toast.makeText(this,"Dice Rolled!",Toast.LENGTH_SHORT).show()

加入這些程式碼的整體看起來會像是這樣:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val rollButton: Button = findViewById(R.id.button2)
        rollButton.setOnClickListener {
            Toast.makeText(this,"Dice Rolled!", Toast.LENGTH_SHORT).show()
        }
    }
}

運行起來就會是這個樣子:

https://ithelp.ithome.com.tw/upload/images/20211007/201406384bDOljgbdG.png


點按按鈕之後改變 TextView

按鈕被點下去了!數字也是時候該讓它出現了!

先去 Attribute 裡看 TextView 的 id ,

https://ithelp.ithome.com.tw/upload/images/20211007/20140638Yomqr1Pwvj.png

已差不多的步驟去讓他與 Button 連動,先宣告一個變數去接 TextView :

val resultTextView: TextView = findViewById(R.Id.textView)
resultTextView.text = "6"

這邊先預設點按之後 resultTextView 的 text 會出現 6 ,之後我們再把骰子的程式補上,最後的程式應該會長這樣:


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val rollButton: Button = findViewById(R.id.button2)
        rollButton.setOnClickListener {
            Toast.makeText(this,"Dice Rolled!", Toast.LENGTH_SHORT).show()
            val resultTextView: TextView = findViewById(R.id.textView)
            resultTextView.text = "6"
        }
    }
}

今天讓終於讓 Button 與程式碼有點互相關聯了,但還是有一小段路要完成,我是真的沒有想到我 Button 可以寫那麼多篇,本想快速結束。但是真的太多了。一樣先 JOHN,

下一篇見寫寫打家打家擺掰。


上一篇
DAY21 這邊先幫你上一個按鈕喔~(三)
下一篇
DAY23 這邊先幫你上一個按鈕喔~(五)
系列文
糟了!是世界奇觀!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言